<?php
class Vend_LoteDAO extends GenericDAO  {

	function __construct() {
		$this->tabela["alteracao"] = array(	"id" 	=> 243,
											"nome" 	=> strtolower(substr(get_class(), 0, -3)));
	
		$this->tabela["consulta"]  = array(	"id" 	=> 260,
											"nome" 	=> "vw_" . strtolower(substr(get_class(), 0, -3)));
	}
	
	public function consultarPK($valor) {
	    $sql = "where id = :id";
	    $params['id'] = $valor;
	    return $this->consultar($sql, $params);
	}
	
	public function consultarPedido($pedido) {
		$sql = "where pedido like :pedido";
		$params['pedido'] = "$pedido%";
		return $this->consultar($sql, $params);
	}
	
	public function consultarQuitacao($pedido) {
		$sql = "select * from vw_quitar_lote where pedido = :pedido";
		$params['pedido'] = $pedido;
		return $this->execQuery($sql, $params);
	}

	public function consultarPedidoAdquirente($pedidoAdquirente) {
		$sql = "where pedido = :pedido or ad_nome like :adq";
		$params['pedido'] = $pedidoAdquirente;
		$params['adq'] = "$pedidoAdquirente%";
		return $this->consultar($sql, $params);
	}
	
	public function consultarPedidoLote($pedidoLote, $sep = "N") {
		$sql = "where pedido = :pedido or l_codigo like :codigo";
		$params['pedido'] = $pedidoLote;
		$params['codigo'] = "$pedidoLote%";
		
		if ($sep != "N") {
			$sql .= " and lotacao > (select count(*) from ocupante o where o.lote = lote)";			
		}
		
		return $this->consultar($sql, $params);
	}
	
	public function inserir($registro, $finalizarTransacao = true) {
		$res = null;

		$data = explode('/',$registro['data']);
		if (isset($data[2])) {
			$registro['data'] = $data[2] . "-" . $data[1] . "-" . $data[0] . " 12:00";
		} else {
			unset($registro['data']);
		}
			
		if (isset($registro['vcto_entrada'])) {
			$data = explode('/',$registro['vcto_entrada']);
			if (isset($data[2])) {
				$registro['vcto_entrada'] = $data[2] . "-" . $data[1] . "-" . $data[0] . " 12:00";
			} else {
				unset($registro['vcto_entrada']);
			}
		}
				
		if (isset($registro['vcto_parcela'])) {
			$data = explode('/',$registro['vcto_parcela']);
			if (isset($data[2])) {
				$registro['vcto_parcela'] = $data[2] . "-" . $data[1] . "-" . $data[0] . " 12:00";
			} else {
				unset($registro['vcto_parcela']);
			}
		}
		
		if ($this->inserirRegistro($registro, false)) {
			$res = $registro;
			$res['id'] = $this->ultimoId();
		} else {
			throw new Exception("Erro ao tentar inserir: " . var_dump($registro));
		}
		return $res;
	}
	
	public function excluir($id, $finalizarTransacao = true) {
		$pk['id'] = $id;
		return $this->excluirRegistro($pk, $finalizarTransacao);
	}
	
	public function alterar($registro, $finalizarTransacao = true) {
		$pk['id'] 		= $registro['id'];
		unset($registro['id']);

		$data = explode('/',$registro['data']);
		if (isset($data[2])) {
			$registro['data'] = $data[2] . "-" . $data[1] . "-" . $data[0];
		} else {
			unset($registro['data']);
		}
			
		$data = explode('/',$registro['vcto_entrada']);
		if (isset($data[2])) {
			$registro['vcto_entrada'] = $data[2] . "-" . $data[1] . "-" . $data[0];
		} else {
			unset($registro['vcto_entrada']);
		}
				
		$data = explode('/',$registro['vcto_parcela']);
		if (isset($data[2])) {
			$registro['vcto_parcela'] = $data[2] . "-" . $data[1] . "-" . $data[0];
		} else {
			unset($registro['vcto_parcela']);
		}
		
		return $this->alterarRegistro($registro, $pk, $finalizarTransacao);
	}
	
	public function suspender($registro, $finalizarTransacao = true) {
		$valor = array('S' => 'N', 'N' => 'S');
		$pk['id'] = $registro['id'];
		unset($registro['id']);
		$registro['ativo'] = $valor[$registro['ativo']];
		
		return $this->alterarRegistro($registro, $pk, $finalizarTransacao);
	}
	
	public function transferir($registro, $finalizarTransacao = true) {
		$pk['id'] = $registro['id'];
		unset($registro['id']);
		
		return $this->alterarRegistro($registro, $pk, $finalizarTransacao);
	}
	
	public function consultarRelatorio($sq_codigo, $q_codigo, $dt_ini, $dt_fim, $tipo, $filtro, $ordem) {
		$sql = "select * from vw_rel_concessao where lote like :lote and data between :dt_ini and :dt_fim ";

		$params['lote'] = "$sq_codigo$q_codigo%";
		$data = explode("/", $dt_ini);
		$params['dt_ini'] = $data[2] . "-" . $data[1] . "-" . $data[0];
		$data = explode("/", $dt_fim);
		$params['dt_fim'] = $data[2] . "-" . $data[1] . "-" . $data[0];
		
		switch ($tipo) {
			case "c":
				$sql .= "and nome like :nome";
				$params['nome'] = "$filtro%";
				break;
			case "u":
				$sql .= "and nome = :nome";
				$params['nome'] = $filtro;
				break;
		}
		
		switch ($ordem) {
			case "c":
				$sql .= "order by nome";
				break;
			case "d":
				$sql .= "order by data";
				break;
			case "s":
				$sql .= "order by lote";
				break;
		}
		return $this->execQuery($sql, $params);
	}
	
	public function consultarCancelados($tipo) {
		$sql = "select * from vw_rel_contratos_cancelados";
		switch ($tipo) {
			case "c":
				$sql .= " where n_ocupantes > 0";
				break;
			case "s":
				$sql .= " where n_ocupantes = 0";
				break;
		}
		$params = array();
		return $this->execQuery($sql, $params);
	}
	
	public function gerarManut($tipo, $ano) {
		$params = array();
		
		$sql = "select parametro, valor from config where parametro in ('carencia', 'periodo', 'valormanut')";
		$ds = $this->execQuery($sql, $params);
		foreach ($ds as $key => $reg) {
			$cfg[$reg['parametro']] = $reg['valor'];
		}
		
		$sql = "select vl.id, vl.ad_id, vl.dt_data, vl.pedido, vl.pl_id, (select max(vcto) from cont_rec c where c.tipo = 'M' and c.pedido = vl.id) max_vcto from vw_vend_lote vl where vl.ativo = 'S' ";
		switch ($tipo) {
			case "c":
				$sql .= "and ad_nome like :nome";
				$params['nome'] = "$filtro%";
				break;
			case "u":
				$sql .= "and ad_nome = :nome";
				$params['nome'] = $filtro;
				break;
		}
		
		$ds = $this->execQuery($sql, $params);
		$hj	= new DateTime();
		$planoDAO = new PlanoDAO();
		$contRecDAO = new Cont_RecDAO();
		$res = null;
		
		foreach ($ds as $key => $reg) {
			if (is_null($reg['max_vcto'])) {
				$data_ref = new DateTime($reg['dt_data']);
				$data_ref->add(new DateInterval("P" . $cfg['carencia'] . "M"));
			} else {
				$data_ref = new DateTime($reg['max_vcto']);
				$data_ref->add(new DateInterval("P" . $cfg['periodo'] . "M"));
			}
			$data = date_parse($data_ref);
				
			do {
				$plano = $planoDAO->consultarCodigo($reg['pl_codigo'] . "002");
				if (!isset($plano[0]['id'])) {
					throw new Exception("Plano gerencial não identificado: " . $reg['pl_codigo'] . "002");
				}
				
				$cont_rec['data'] 		= $hj->format('d/m/Y');
				$cont_rec['ad_id'] 		= $reg['ad_id'];
				if ($data["month"] < 7) {
					$cont_rec['historico']	= "Manut. jazigo - " . $data["month"] . "/" . $data["year"] . "-" . ($data["month"] + 6) . "/" . $data["year"] . " - Ped.: " . $reg["pedido"];   
				} else {
					$cont_rec['historico']	= "Manut. jazigo - " . $data["month"] . "/" . $data["year"] . "-" . ($data["month"] - 6) . "/" . $data["year"] . " - Ped.: " . $reg["pedido"];
				}
				$cont_rec['vcto']		= $data_ref->format('d/m/Y');
				$cont_rec['vr_titulo']	= $cfg['valormanut'];
				$cont_rec['pd_id']		= $reg['id'];
				$cont_rec['pl_id']		= $plano[0]['id'];
				
				if ($contRecDAO->inserir($cont_rec, false)) {
					$res[] = $cont_rec;
				} else {
					throw new Exception("Erro ao gerar taxa!  \n" . var_dump($cont_rec));					
				}
				
				$data_ref->add(new DateInterval("P" . $cfg['periodo'] . "M"));
				$data = date_parse($data_ref);
			} while ($data['year'] <= $ano);
			
			$this->commit();
		}
		return $res;
	}
}
?>